<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Postfix + Courier-IMAP + Cyrus-SASL + MySQL + IMP完全指南</title>
    <style type="text/css">
    <!--
    p,li {  font-size: 12px; margin-top: 4px; margin-bottom: 4px}
    td {  font-family: "Courier New", "Courier", "mono"; font-size: 12px; font-weight: bold}
    .type {color: #FF0000;}
    .style2 {color: #E63A00}
    -->
    </style>
  </head>
  <body leftmargin="20" bgcolor="#ffffff">
    <h2 align="left"><font face="Arial, Helvetica, sans-serif">CNGNU Postfix</font>邮件系统系列指南之二</h2>
    <h1 align="center"><font face="Arial, Helvetica, sans-serif"><font color="#ff0000">P</font>ostfix + <font color="#ff0000">C</font>ourier-IMAP + <font color="#ff0000">C</font>yrus-SASL + <font color="#ff0000">M</font>ySQL + <font color="#ff0000">I</font>MP</font><br /> 完全指南</h1>
    <hr noshade="noshade" size="1" />
    <p>&nbsp;</p>
    <blockquote>
      <p>作者：王兴宇 <a href="mailto:wxy@cngnu.org"><font color="#0000ff">&lt;wxy@cngnu.org&gt;</font></a> </p>
      <p>版本：0.20</p>
      <p>版权：GPL</p>
      <p>发布日期：2004-01-29</p>
      <p>&nbsp;</p>
      <h3>目录</h3>
      <p><a href="#a.1">1.&nbsp; 概述</a></p>
      <p><a href="#a.1.1">1.1.&nbsp; 目的</a></p>
      <p><a href="#a.1.2">1.2.&nbsp; 更新历史</a></p>
      <p><a href="#a.1.3">1.3.&nbsp; TODO</a></p>
      <p><a href="#a.1.4">1.4.&nbsp; 鸣谢</a></p>
      <p><a href="#a.2">2.&nbsp; 系统功能</a></p>
      <p><a href="#a.3">3.&nbsp; 系统基本前提</a></p>
      <p><a href="#a.4">4.&nbsp; 配置MySQL</a></p>
      <p><a href="#a.4.1">4.1.&nbsp; 运行</a></p>
      <p><a href="#a.4.2">4.2. 测试</a></p>
      <p><a href="#a.4.3">4.3.&nbsp; 配置</a></p>
      <p><a href="#a.5">5.&nbsp; 安装pam_mysql</a></p>
      <p><a href="#a.5.1">5.1.&nbsp; 下载</a></p>
      <p><a href="#a.5.2">5.2.&nbsp; 编译与安装</a></p>
      <p><a href="#a.5.3">5.3.&nbsp; 配置</a></p>
      <p><a href="#a.6">6.&nbsp; 安装Cyrus-SASL</a></p>
      <p><a href="#a.6.1">6.1.&nbsp; 下载</a></p>
      <p><a href="#a.6.2">6.2.&nbsp; 编译与安装</a></p>
      <p><a href="#a.6.3">6.3.&nbsp; 配置</a></p>
      <p><a href="#a.6.4">6.4.&nbsp;运行</a></p>
      <p><a href="#a.7">7.&nbsp; 安装Postfix</a></p>
      <p><a href="#a.7.1">7.1.&nbsp; 下载</a></p>
      <p><a href="#a.7.2">7.2.&nbsp; 编译与安装</a></p>
      <p><a href="#a.7.3">7.3.&nbsp; 配置</a></p>
      <p><a href="#a.7.4">7.4.&nbsp; 运行</a></p>
      <p><a href="#a.7.5">7.5.&nbsp; 测试</a></p>
      <p><a href="#a.8">8.&nbsp; 安装Cyrus-IMAP</a></p>
      <p><a href="#a.8.1">8.1.&nbsp; 下载</a></p>
      <p><a href="#a.8.2">8.2.&nbsp; 编译与安装</a></p>
      <p><a href="#a.8.3">8.3.&nbsp; 配置</a></p>
      <p><a href="#a.8.4">8.4.&nbsp; 运行</a></p>
      <p><a href="#a.8.5">8.5.&nbsp; 测试</a></p>
      <p><a href="#a.9">9.&nbsp; 安装IMP</a></p>
      <p><a href="#a.9.1">9.1.&nbsp; 下载</a></p>
      <p><a href="#a.9.2">9.2.&nbsp; 配置Apache/PHP</a></p>
      <p><a href="#a.9.3">9.3.&nbsp; 配置Horde</a></p>
      <p><a href="#a.9.4">9.4.&nbsp; 配置Imp</a></p>
      <p><a href="#a.9.5">9.5.&nbsp; 配置Turba</a></p>
      <p><a href="#a.9.6">9.6.&nbsp; 测试IMP</a></p>
      <p><a href="#a.10">10.&nbsp; 其它</a></p>
      <p><a href="#a.10.1">10.1.&nbsp; 启动脚本</a></p>
      <p><a href="#a.10.2">10.2.&nbsp; </a> <a href="#a.10.3">整体测试</a> </p>
      <hr size="1" />
      <p>&nbsp;</p>
    </blockquote>
    <h1><a id="a.1" name="a.1"></a>1.&nbsp; 概述</h1>
    <h2><a name="a.1.1"></a>1.1.&nbsp; 目的</h2>
    <p>本文试图介绍如何在一个Linux平台上安装一套功能完整的邮件系统。这里我们以Postfix做SMTP服务器丶Courier-IMAP做POP3/IMAP4服务器丶通过Cyrus-SASL对存储在MySQL数据库中的用户进行验证和授权，并且使用IMP来提供一个完善的WEBMAIL界面。</p>
    <p>这个邮件系统的设计目标是提供一个可扩充的丶具备大多数功能的邮件系统。</p>
    <p>如果希望使用Cyrus-IMAP做为POP3/IMAP4服务器，可以参阅本文的姊妹篇：<a href="http://www.cngnu.org/technology/Postfix_I.html"><font color="#0000ff">http://www.cngnu.org/technology/Postfix_I.html</font></a>。</p>
    <p>本文的最新版本可以在这里找到:<a href="http://www.cngnu.org/technology/Postfix_II.html"><font color="#0000ff">http://www.cngnu.org/technology/Postfix_II.html</font></a></p>
    <p>有关本文所涉及的技术问题，请到<a href="http://www.anti-spam.org.cn/forums/"><font color="#0000ff">http://www.anti-spam.org.cn/forums/</font></a>的mail版讨论，我会尽快回复的，请勿就技术问题给我发邮件。</p>
    <p>本文的版权遵循GPL，可以在不删除版权信息和注明修改的情况下任意传播。</p>
    <h2><a name="a.1.2"></a>1.2.&nbsp; 更新历史</h2>
    <ul>
      <li>2004-01-29 第一次发布，版本0.20。 </li>
    </ul>
    <h2><a name="a.1.3"></a>1.3.&nbsp; TODO </h2>
    <ul>
      <li>增加邮件列表功能 </li>
      <li>增加SSL部分的内容 </li>
      <li>翻译：希望有能力的朋友可以翻译这篇文章为英文，这样国外的朋友也可以看到 </li>
    </ul>
    <h2><a name="a.1.4"></a>1.4.&nbsp; 鸣谢</h2>
    <p> </p>
    <h1><a name="a.2"></a>2.&nbsp; 系统功能</h1>
    <p>系统逻辑结构：</p>
      <pre><font face="Courier New, Courier, mono" size="2">
      +--------------------------------------------------------------+
      |                                                              |
      |  25/25    25/25                110/993  143/995    80/443    |
      | Incoming Outgoing                POP3     IMAP    WEB-MAIL   |
      |    /\       /\                    /\       /\        /\      |
      |    ||       ||                    ||       ||        ||      |
      |    \/       \/                    \/       \/        \/      |
      +---------------------------------+----------------+-----------+
      |                  Postfix        |                |    IMP    |
      |              +------------------+                +-----------+
      |              |    Cyrus-SASL    |        Courier-IMAP        |
      +----------+   +------------------+--------------+             |
      | MailDrop |   |authdaemond.mysql |(authmysqlrc) |             |
      +----------+---+------------------+--------------+-------------+
      | MailDir/ |                   MySQL             |   MailDir/  |
    +----------+-------------------------------------+-------------+</font></pre>
    <p>整个系统对外的界面包括几个部分，用来发信的SMTP丶用来收信的POP3和IMAP丶以及一个WEB界面的邮件使用系统。这里没有提供WEB界面的管理工具，需要大家自行依据实际需要开发。如果需要商业应用，可以购买CEM产品（<a href="http://cngnu.net/products/cem/"><font color="#0000ff">http://cngnu.net/products/cem/</font></a>），其中包括了完善的管理界面和优化的邮件服务器环境。</p>
    <p>MySQL作为系统中存储数据的核心，它存储了用户的信息。这个信息不但用於POP3/IMAP和SMTP AUTH的认证需要，而且也为Postfix提供了本地接收者列表丶邮件转发功能和过滤功能开关。</p>
    <p>认证分为两种类型，Postfix中的发信认证是通过SASL对MySQL进行查询进行的；Courier-IMAP的收信认证是通过Courier-IMAP的MySQL支持进行的。</p>
    <p>用户的信件是存储在标准的（Qmail格式）MailDir/中的。Postfix接收到信件後通过MailDrop投递到用户的MailDir/中。Courier-IMAP通过认证後访问MailDir/来读取信件。</p>
    <h1><a name="a.3"></a>3.&nbsp; 系统基本前提</h1>
    <p>本文以Linux系统为目标平台，支持多数的Linux平台如RedHat 7.x/8.x/9.x/AS2.1/AS3丶Mandrake 8.x/9.x等，理论上也会支持其他的Linux发行版，甚至其他的UNIX系统。</p>
    <p>这里以RedHat Linux Advance Server Enterprise V 3.0 （以下简称AS3）为说明平台。我采用了最基本的AS3安装，只选择了「Web Server」丶「Dns Name Server」丶「MySQL Database Server」丶「Development Tools」和「Kernel Development」等软件包组（「Core」和「Base」组是默认必选的软件包）。</p>
    <p>除此外，还需要额外安装以下RPM：</p>
    <p>1丶php-mysql-4.3.2-8.ent.i386.rpm（在CD3）</p>
    <h1><a name="a.4"></a>4.&nbsp; 安装MySQL</h1>
    <h2><a id="a.4.1" name="a.4.1"></a>4.1.&nbsp; 下载</h2>
    <p>AS3默认是只包含MySQL除了服务器程序外的部分的，所以需要从RPMFIND下载MySQL的源RPM重建（最好使用源码包，采用MySQL.com提供的RPM和BIN包都可能在其它使用mysql的部分编译时候出现错误）。</p>
    <table width="100%" bgcolor="#ccffcc" border="0">
      <tbody>
        <tr>
          <td> <p>[root@mail root]# <span class="type"><font color="#ff0000">cd /usr/src</font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">wget </font><a href="ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/mysql-3.23.58-1.src.rpm"><font color="#0000ff">ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/mysql-3.23.58-1.src.rpm</font></a></span></p></td>
        </tr>
      </tbody>
    </table>
    <h2><a id="a.4.2" name="a.4.2"></a>4.2.&nbsp; 编译与安装</h2>
    <table width="100%" bgcolor="#ccffcc" border="0">
      <tbody>
        <tr>
          <td> <p>[root@mail src]# <span class="type"><font color="#ff0000">rpmbuild -bb mysql-3.23.58-1.src.rpm </font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">cd redhat/RPMS/i386</font></span></p> <p>[root@mail i386]# <span class="type"><font color="#ff0000">rpm -ivh mysql-server-3.23.58-1.i386.rpm</font></span></p></td>
        </tr>
      </tbody>
    </table>
    <p>为提高MySQL的安全性，使之只监听在本地打环端口，修改/etc/my.cnf：</p>
    <table width="100%" bgcolor="#ccffcc" border="0">
      <tbody>
        <tr>
          <td> <p>[root@mail i386]# <span class="type"><font color="#ff0000">cd</font></span></p> <p>[root@mail root]# <span class="type"><font color="#ff0000">vi /etc/my.cnf </font></span></p></td>
        </tr>
      </tbody>
    </table>
    <p>在[mysqld]小节里面添加：</p>
    <table width="100%" bgcolor="#ccffcc" border="0">
      <tbody>
        <tr>
          <td bgcolor="#ffffcc">bind-address=127.0.0.1</td>
        </tr>
      </tbody>
    </table>
    <p>并设置其开机时候自动运行：</p>
    <table width="100%" bgcolor="#ccffcc" border="0">
      <tbody>
        <tr>
          <td> <p>[root@mail root]# <span class="type"><font color="#ff0000">chkconfig --level 0123456 mysqld on </font></span></p></td>
        </tr>
      </tbody>
    </table>
    <p><font color="#ff0000"></font></p>
    <h2><a id="a.4.3" name="a.4.3"></a>4.3.&nbsp; 运行</h2>
    <p>启动命令如下：</p>
    <table width="100%" bgcolor="#ccffcc" border="0">
      <tbody>
        <tr>
          <td> <p>[root@mail i386]# <span class="type"><font color="#ff0000">/etc/init.d/mysqld start</font></span></p></td>
        </tr>
      </tbody>
    </table>
    <h2><a id="a.4.4" name="a.4.4"></a>4.4.&nbsp; 测试</h2>
    <p>启动MySQL後，首先检查日志/var/log/messages有无错误信息，然後检查进程，应该有如下进程存在：</p>
    <table width="100%" bgcolor="#ccffcc" border="0">
      <tbody>
        <tr>
          <td> <p>[root@mail root]# <span class="type"><font color="#ff0000">pstree | grep mysqld</font></span></p> <p><font color="#ff0000"></font>&nbsp;</p> <p>|-safe_mysqld---mysqld</p> <p>&nbsp;</p></td>
        </tr>
      </tbody>
    </table>
    <p>接着检查端口，应该有如下端口打开：</p>
    <table width="100%" bgcolor="#ccffcc" border="0">
      <tbody>
        <tr>
          <td> <p>[root@mail root]#<font color="#ff0000"> <span class="type">netstat -an | grep LISTEN</span></font></p> <p><font color="#ff0000"></font>&nbsp;</p> <p>tcp00 127.0.0.1:33060.0.0.0:*LISTEN<br /></p></td>
        </tr>
      </tbody>
    </table>
    <p>&nbsp;</p>
    <h2><a name="a.4.1"></a>4.5.&nbsp; 建立数据库</h2>
    <p>MySQL安装配置好以後，创建如下SQL脚本mail.sql：</p>
    <table width="100%" bgcolor="#ccffcc" border="0">
      <tbody>
        <tr>
          <td bgcolor="#ffffcc"> <p>CREATE DATABASE mail;</p> <p>GRANT ALL ON mail.* TO mail@localhost</p> <p>IDENTIFIED BY &quot;secret&quot;;</p> <p>FLUSH PRIVILEGES;</p> <p>&nbsp;</p> <p>USE mail;</p> <p>CREATE TABLE USER (<br />ID int(10) unsigned NOT NULL auto_increment,<br />USERNAME varchar(128) NOT NULL default '',<br />PASSWORD varchar(40) NOT NULL default '',<br />CLEAR_PASSWORD varchar(40) NOT NULL default '', <br />FORWARD varchar(128) NOT NULL default '',<br />DOMAIN varchar(64) NOT NULL default '',<br />HOMEDIR varchar(128) NOT NULL default '',<br />MAILDIR varchar(128) NOT NULL default '', <br />MAIL varchar(64) NOT NULL default '', <br />GID int(11) NOT NULL default 450,<br />UID int(11) NOT NULL default 450,<br />FILTER varchar(64) NOT NULL default 'OK',<br />QUOTA int(11) NOT NULL default '10485760',<br />STATUS tinyint(4) NOT NULL default '1',<br />PRIMARY KEY (ID),<br />UNIQUE KEY USERNAME (USERNAME),<br />UNIQUE KEY MAIL (MAIL)<br />) TYPE=MyISAM;</p> <p>&nbsp;</p> <p>INSERT INTO USER (USERNAME,PASSWORD,CLEAR_PASSWORD,<br />FORWARD,DOMAIN,HOMEDIR,MAILDIR,MAIL)</p> <p>VALUES ('trueuser','$1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/','testpw',</p> <p>'trueuser','cngnu.org','/data/mail/trueuser','/data/mail/trueuser/Maildir',</p> <p>'trueuser@cngnu.org'),<br />('virtualuser@cngnu.org','$1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/','testpw',</p> <p>'virtualuser@cngnu.org','cngnu.org','/data/mail/cngnu.org/virtualuser',<br />'/data/mail/cngnu.org/virtualuser/Maildir','virtualuser@cngnu.org');</p> <p></p></td>
        </tr>
      </tbody>
    </table>
    <p>&nbsp;</p>
    <table width="100%" bgcolor="#ccffcc" border="0">
      <tbody>
        <tr>
          <td> <p>[root@mail root]# <span class="type"><font color="#ff0000">mysql &lt; mail.sql</font></span></p></td>
        </tr>
      </tbody>
    </table>
    <p>在MySQL中创建邮件用户数据库，并添加两个测试邮箱：</p>
    <ul>
      <li>非虚拟域邮箱「trueuser」，密码是「testpw」 </li>
      <li>虚拟域邮箱「virtualuser@cngnu.org」，密码是「testpw」 </li>
    </ul>
    <p>上面的mail数据库的USER表用来保存用户信息：</p>
    <ul>
      <li>USERNAME是用户名。USERNAME不但作为认证的字段，而且是本地邮箱查找条件（见下面的Postfix的virtual.mysql）。这里采用了加密密码是为了更好的安全性。对於
        <ul>
          <li>非虚拟域邮箱：USERNAME字段是邮件的本地部分（「@」前面的部分） </li>
          <li>虚拟域邮箱：USERNAME字段是邮件地址全称 </li>
        </ul> </li>
        <li>PASSWORD字段是邮箱的MD5-Crypt密码，CLEAR_PASSWORD是明文密码。邮箱的密码是「testpw」，加密後的（MD5-CRYPT）密文是「$1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/」（可以通过系统的passwd命令来添加一个用户，生成密码，然後从/etc/shadow中复制。）。保存两个密码是由於Cyrus-SASL的mysql认证方式不支持加密的密码，而Courier-IMAP的mysql认证却使用加密的密码。 </li>
        <li>FORWARD字段默认情况下与USERNAME一样，在此情况下，邮件递交到本地邮箱（由於Postfix区分邮箱的大小写，所以通过这样的一个转发，正好可以消除大小写的区别）；如果FORWARD字段是另外一个用户名或者邮件地址，则该邮件被转发到别的用户或其它邮件地址。 </li>
        <li>DOMAIN字段用来快速找出某个域下存在的邮箱，仅为管理方便使用。 </li>
        <li>MAILDIR字段用来给MailDrop指出邮件投递那里，HOMEDIR字段是邮件用户的主目录，通常指向一个任意存在的公共位置，不过可以使每个用户都拥有自己的主目录，在其中可以放入maildrop的过滤规则来实现用户级别的过滤。 </li>
        <li>MAIL字段是邮件地址全称。对於非虚拟域邮箱，它包含了本地部分外的域部分；对於虚拟域邮箱，它和USERNAME字段一样。一方面是为了管理方便使用，同时该字段还用来做maildrop递交和全局过滤控制FILTER的查找条件（见FILTER字段及下面Postfix的filter.mysql）。 </li>
        <li>GID字段和UID字段是系统使用的投递用户ID，即MailDrop的运行身份（在Postfix的master.cf指定）。 </li>
        <li>FILTER字段用於控制该邮箱是否接受服务器的全局邮件过滤。该值设置为「OK」或为空表示对该邮箱不进行过滤；设置为「DUNNO」表示对该邮箱进行Postfix中定於的全局过滤。该值可以是任何合法的Postfix的access过滤规则。 </li>
        <li>PARTITION字段用於指明邮箱存储的Cyrus-IMAP邮件分区。可以建立多个不同的邮件分区。仅为了管理方便使用。 </li>
        <li>QUOTA字段指定邮箱的磁盘限额。仅为了管理方便使用。 </li>
        <li>STATUS字段用来指示该用户是否有效，可以通过修改该值为0来临时禁止某个用户。 </li>
      </ul>
      <h1><a id="a.5" name="a.5"></a>5.&nbsp; 安装Cyrus-SASL</h1>
      <h2><a id="a.5.1" name="a.5.1"></a>5.1.&nbsp; 下载</h2>
      <p>目前多数版本的LINUX中都已经内置了Cyrus-SASL，但是并不符合我们的需要，所以我们需要从rpmfind.net下载Cyrus-SASL的源RPM修改後重建并更新系统的Cyrus-SASL：</p>
      <p></p>
      <p>&#55394;&#56988;　<a href="ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/cyrus-sasl-2.1.15-3.src.rpm"><font color="#0000ff">ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/cyrus-sasl-2.1.15-3.src.rpm</font></a></p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail root]# <span class="type"><font color="#ff0000">cd /usr/src</font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">wget </font><a href="ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/cyrus-sasl-2.1.15-3.src.rpm"><font color="#0000ff">ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/cyrus-sasl-2.1.15-3.src.rpm</font></a></span></p></td>
          </tr>
        </tbody>
      </table>
      <p><font color="#0000ff"></font>&nbsp;</p>
      <h2><a id="a.5.2" name="a.5.2"></a>5.2.&nbsp; 编译与安装</h2>
      <p>安装Cyrus-sasl源RPM：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail src]# <span class="type"><font color="#ff0000">rpm -ivh cyrus-sasl-2.1.15-3.src.rpm</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>应用以下补丁文件cyrus-sasl.spec.patch：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc">*** cyrus-sasl.spec 2003-08-22 03:22:37.000000000 +0800<br />--- /root/cyrus-sasl.spec 2004-01-16 12:56:30.000000000 +0800<br />***************<br />*** 5,11 ****<br />Summary: The Cyrus SASL library.<br />Name: cyrus-sasl<br />Version: 2.1.15<br /><font color="#ff0000"><span class="type">! Release: 3</span><br /></font>License: Freely Distributable<br />Group: System Environment/Libraries<br />Source0: ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-%{version}.tar.gz<br />--- 5,11 ----<br />Summary: The Cyrus SASL library.<br />Name: cyrus-sasl<br />Version: 2.1.15<br /><font color="#ff0000"><span class="type">! Release: 3m</span><br /></font>License: Freely Distributable<br />Group: System Environment/Libraries<br />Source0: ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-%{version}.tar.gz<br />***************<br />*** 73,78 ****<br />--- 73,87 ----<br />The %{name}-md5 package contains the Cyrus SASL plugins which support<br />CRAM-MD5 and DIGEST-MD5 authentication schemes.<br /><br /><font color="#ff0000"><span class="type">+ %package mysql<br />+ Requires: %{name} = %{version}-%{release}<br />+ Group: System Environment/Libraries<br />+ Summary: Mysql support for Cyrus SASL.<br />+ <br />+ %description mysql<br />+ The %{name}-mysql package contains the Cyrus SASL plugins which support<br />+ Mysql auxprop authentication schemes.<br />+ </span><br /></font>%prep<br />%setup -q -c -a 2<br />pushd cyrus-sasl-%{cs1_version}<br />***************<br />*** 167,173 ****<br />--enable-cram \<br />--enable-digest \<br />--enable-plain \<br /><font color="#ff0000"><span class="type">! --enable-login</span><br /></font># --enable-auth-sasldb -- EXPERIMENTAL<br />make sasldir=%{_plugindir2}<br />popd<br />--- 176,183 ----<br />--enable-cram \<br />--enable-digest \<br />--enable-plain \<br /><font color="#ff0000"><span class="type">! --enable-login \<br />! --with-mysql</span><br /></font># --enable-auth-sasldb -- EXPERIMENTAL<br />make sasldir=%{_plugindir2}<br />popd<br />***************<br />*** 273,278 ****<br />--- 283,293 ----<br />%{_plugindir2}/*digestmd5*.so*<br />%{_plugindir2}/*digestmd5*.la<br /><br /><font color="#ff0000"><span class="type">+ %files mysql<br />+ %defattr(-,root,root)<br />+ %{_plugindir2}/*mysql*.so*<br />+ %{_plugindir2}/*mysql*.la<br />+ </span><br /></font>%files gssapi<br />%defattr(-,root,root)<br />%{_plugindir}/*gssapi*.so*<br />***************<br />*** 300,305 ****<br />--- 315,321 ----<br />%{_plugindir2}/*anonymous*.a<br />%{_plugindir2}/*crammd5*.a<br />%{_plugindir2}/*digestmd5*.a<br /><font color="#ff0000"><span class="type">+ %{_plugindir2}/*mysql*.a</span><br /></font>%{_plugindir2}/*gssapi*.a<br />%{_plugindir2}/*login*.a<br />%{_plugindir2}/*plain*.a<br /></td>
          </tr>
        </tbody>
      </table>
      <p>这个补丁主要对原有的Cyrus-SASL库添加了对MySQL认识的支持。</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail src]# <span class="type"><font color="#ff0000">cd redhat/SPECS</font></span></p> <p>[root@mail SPECS]# <span class="type"><font color="#ff0000">patch -p0 &lt; ../../cyrus-sasl.spec.patch </font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p><font color="#ff0000"></font></p>
      <p>如果没有出现错误，然後重建RPM：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail SPECS]# <span class="type"><font color="#ff0000">rpmbuild -bb cyrus-sasl.spec </font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>重建完成後更新系统的Cyrus-SASL：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail SPECS]# <span class="type"><font color="#ff0000">cd ../RPMS/i386</font></span></p> <p>[root@mail i386]# <span class="type"><font color="#ff0000">rm -rf cyrus-sasl-debuginfo*.rpm</font></span></p> <p>[root@mail i386]# <span class="type"><font color="#ff0000">rpm -Uvh cyrus-sasl*.rpm</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p><font color="#ff0000"></font>&nbsp;</p>
      <h2><a id="a.5.3" name="a.5.3"></a>5.3.&nbsp; 配置</h2>
      <p>设置Postfix使用SASL的mysql扩展认证来支持smtp auth认证：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail i386]#<span class="type"><font color="#ff0000"> vi /usr/lib/sasl2/smtpd.conf</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>内容如下：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc">pwcheck_method: auxprop<br />mech_list: plain login<br />mysql_user: mail<br />mysql_passwd: secret<br />mysql_hostname: localhost<br />mysql_database: mail<br />mysql_statement: select CLEAR_PASSWORD from USER where (USERNAME = '%u' or MAIL = '%u@%r') limit 1 </td>
          </tr>
        </tbody>
      </table>
      <p>对於cyrus-sasl-2.1.17版本的sasl，其对mysql丶postgresql等数据库的支持已经合并为一个sql扩展，具体的配置语句略有不同。</p>
      <p>整个系统只有Postfix的smtp auth使用了SASL认证。Courier-IMAP的认证使用了它自己的mysql扩展。</p>
      <h1><a name="a.6"></a>6.&nbsp; 安装Maildrop</h1>
      <h2><a id="a.6.1" name="a.6.1"></a>6.1.&nbsp; 下载</h2>
      <p><a href="http://sourceforge.net/projects/courier/"><font color="#0000ff">http://sourceforge.net/projects/courier/</font></a></p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail i386]# <span class="type"><font color="#ff0000">cd /usr/src</font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">wget </font></span><a href="http://heanet.dl.sourceforge.net/sourceforge/courier/maildrop-1.6.3.tar.bz2"><font color="#0000ff">http://heanet.dl.sourceforge.net/sourceforge/courier/maildrop-1.6.3.tar.bz2 </font></a></p></td>
          </tr>
        </tbody>
      </table>
      <h2><a id="a.6.2" name="a.6.2"></a>6.2.&nbsp; 编译与安装</h2>
      <p>先添加用户maildrop，其UID和GID是mysql数据库字段UID和GID的值：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail src]# <span class="type"><font color="#ff0000">groupadd -g 450 maildrop</font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">useradd -g 450 -u 450 -c maildrop -M -d/data/mail -s/no/shell maildrop</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>编译maildrop，并增加mysql支持和限额支持：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail src]# <span class="type"><font color="#ff0000">tar -xvjf maildrop-1.6.3.tar.bz2 </font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">cd maildrop-1.6.3 </font></span></p> <p><font color="#ff0000"></font>&nbsp;</p> <p>[root@mail maildrop-1.6.3]# <span class="type"><font color="#ff0000">./configure \</font></span></p> <p>&gt; <span class="type"><font color="#ff0000">--without-db --enable-sendmail=/usr/sbin/sendmail \</font></span></p> <p>&gt; <span class="type"><font color="#ff0000">--enable-trusted-users='root maildrop' \</font></span></p> <p>&gt; <span class="type"><font color="#ff0000">--enable-maildropmysql --with-mysqlconfig=/etc/maildrop.mysql \</font></span></p> <p>&gt; <font color="#ff0000"><span class="type">--enable-maildirquota --with-trashquota </span><span class="type">--with-dirsync</span></font></p> <p>[root@mail maildrop-1.6.3]# <span class="type"><font color="#ff0000">make</font></span></p> <p>[root@mail maildrop-1.6.3]# <span class="type"><font color="#ff0000">make install-strip </font></span></p> <p>[root@mail maildrop-1.6.3]# <span class="type"><font color="#ff0000">make install-man</font></span></p> <p>[root@mail maildrop-1.6.3]# <span class="type"><font color="#ff0000">cp maildropmysql.config /etc/maildrop.mysql </font></span></p></td>
          </tr>
        </tbody>
      </table>
      <h2><a id="a.6.3" name="a.6.3"></a>6.3.&nbsp; 配置</h2>
      <p>然後编辑配置文件/etc/maildrop.mysql：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail maildrop-1.6.3]# <span class="type"><font color="#ff0000">vi /etc/maildrop.mysql</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>内容如下</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>hostname localhost<br />port 3306<br />socket /var/lib/mysql/mysql.sock<br />database mail<br />dbuser mail<br />dbpass secret<br />dbtable USER<br />default_uidnumber 450<br />default_gidnumner 450<br />uid_field MAIL <br />uidnumber_field UID<br />gidnumber_field GID<br />maildir_field MAILDIR<br />homedirectory_field HOMEDIR<br />quota_field QUOTA<br />mailstatus_field STATUS<br />where_clause &quot;&quot; <br /></p></td>
          </tr>
        </tbody>
      </table>
      <p>&nbsp;</p>
      <h1><a name="a.7"></a>7.&nbsp; 安装Postfix</h1>
      <h2><a name="a.7.1"></a>7.1.&nbsp; 下载</h2>
      <p><a href="http://www.postfix.org/ftp-sites.html" target="_top"><font color="#0000ff">http://www.postfix.org/ftp-sites.html</font></a></p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail maildrop-1.6.3]# <span class="type"><font color="#ff0000">cd /usr/src</font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">wget </font><a href="http://postfix.energybeam.com/source/official/postfix-2.0.16.tar.gz"><font color="#0000ff">http://postfix.energybeam.com/source/official/postfix-2.0.16.tar.gz</font></a><font color="#ff0000"> </font></span></p></td>
          </tr>
        </tbody>
      </table>
      <h2><a name="a.7.2"></a>7.2.&nbsp; 编译与安装</h2>
      <p>如果你的系统上原来有sendmail，先将其停止并将其文件改名：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail src]# <span class="type"><font color="#ff0000">/etc/init.d/sendmail stop</font></span></p> <p>[root@mail src]# <font color="#ff0000"><span class="type">chkconfig --level 0123456 sendmail off</span><br /></font>[root@mail src]# <span class="type"><font color="#ff0000">mv /usr/bin/newaliases /usr/bin/newaliases.orig</font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">mv /usr/bin/mailq /usr/bin/mailq.orig</font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">mv /usr/sbin/sendmail /usr/sbin/sendmail.orig</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p><font color="#ff0000"></font>&nbsp;</p>
      <p>然後添加两个组：postfix和maildrop和一个用户：postfix</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail src]# <span class="type"><font color="#ff0000">groupadd -g 400 postfix</font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">groupadd -g 401 postdrop</font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">useradd -u 400 -g 400 -c postfix -M -d/no/where -s/no/shell postfix</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>这里的组和用户的ID是系统中未使用的ID。</p>
      <p>&nbsp;</p>
      <p>编译Postfix，并支持mysql和sasl：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail src]# <span class="type"><font color="#ff0000">tar -xvzf postfix-2.0.16.tar.gz</font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">cd postfix-2.0.16</font></span></p> <p><font color="#ff0000"></font>&nbsp;</p> <p>[root@mail postfix-2.0.16]# <span class="type"><font color="#ff0000">make -f Makefile.init makefiles \</font></span></p> <p>&gt; <span class="type"><font color="#ff0000">'CCARGS=-DUSE_SASL_AUTH -DHAS_MYSQL -I/usr/include/mysql -I/usr/include/sasl' \</font></span></p> <p>&gt; <span class="type"><font color="#ff0000">'AUXLIBS=-L/usr/lib/mysql -L/usr/lib/sasl2 -lmysqlclient -lsasl2 -lz -lm'</font></span></p> <p>[root@mail postfix-2.0.16]# <span class="type"><font color="#ff0000">make install</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>安装时，安装程序会提问一些问题，可以直接按回车采用默认值。</p>
      <p>这里切记要指定正确的SASL2的INCLUDE和LIB位置。由於现在很多linux发行版上都已经带有了sasl，如果不指定的话，很可能会使用了不同版本的头文件和库，在这种情况下，每次连接SMTP时，smtpd就会发生致命错误「Fatal: SASL per-connection server init...」而崩溃。</p>
      <p>&nbsp;</p>
      <p>给postfix用户做一个系统别名，并将超级用户的邮箱转发到一个普通用户如tester。使用/etc/postfix/aliases别名数据库：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail postfix-2.0.16]# <font color="#ff0000">cd postfix</font></p> <p>[root@mail postfix]# <span class="type"><font color="#ff0000">echo 'root: virtualuser@cngnu.org' &gt;&gt; /etc/postfix/aliases</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>生成/etc/postfix/aliases别名数据库：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td>[root@mail postfix]# <span class="type"><font color="#ff0000">postalias /etc/postfix/aliases</font></span></td>
          </tr>
        </tbody>
      </table>
      <p>生成/etc/postfix/virtual的DB库：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail postfix]# <span class="type"><font color="#ff0000">postmap virtual</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>保留db格式的virtual库是为了系统临时增加转发方便起见。</p>
      <h2><a name="a.7.3"></a>7.3.&nbsp; 配置</h2>
      <p>修改/etc/postfix/master.cf中的关於maildrop的配置：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail postfix]# <span class="type"><font color="#ff0000">vi master.cf</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>将如下两行：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc">maildrop unix - n n - - pipe<br />&#55394;&#56988;flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}</td>
          </tr>
        </tbody>
      </table>
      <p>修改为：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc">maildrop unix - n n - - pipe<br />&#55394;&#56988;flags=DRhu user=maildrop argv=/usr/local/bin/maildrop -d ${recipient}</td>
          </tr>
        </tbody>
      </table>
      <p>这里要把maildrop的路径修改为上面安装的maildrop实际安装路径，用户maildrop是我们上面添加过的。 记着flags=...这行前面是以空格缩进的。</p>
      <p>&nbsp;</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail postfix]# <span class="type"><font color="#ff0000">vi main.cf</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p><font color="#ff0000"></font>&nbsp;</p>
      <p>修改/etc/postfix/main.cf的配置：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>myhostname = mail.cngnu.org</p> <p>mydomain = cngnu.org</p> <p>myorigin = $mydomain</p> <p>mydestination = $mydomain,$myhostname</p> <p>mynetworks_style = host</p> <p> </p> <p>alias_maps = hash:/etc/postfix/aliases</p> <p>alias_database = hash:/etc/postfix/aliases</p> <p>&nbsp;</p> <p>home_mailbox = Maildir/</p> <p></p> <p>&nbsp;</p> <p>mailbox_transport = maildrop </p> <p>fallback_transport = maildrop </p> <p>&nbsp;</p> <p>virtual_maps = hash:/etc/postfix/virtual,mysql:/etc/postfix/virtual.mysql</p> <p>&nbsp;</p> <p>smtpd_sasl_auth_enable = yes</p> <p>broken_sasl_auth_clients = yes</p> <p>smtpd_sasl_security_options = noanonymous</p> <p>&nbsp;</p> <p>smtpd_recipient_restrictions = <br />&nbsp;&nbsp;&nbsp;&nbsp;permit_mynetworks,<br />&nbsp;&nbsp;&nbsp;&nbsp;permit_sasl_authenticated,<br />&nbsp;&nbsp;&nbsp;&nbsp;check_recipient_access mysql:/etc/postfix/filter.mysql,<br />&nbsp;&nbsp;&nbsp;&nbsp;reject_invalid_hostname,<br />&nbsp;&nbsp;&nbsp;&nbsp;reject_non_fqdn_hostname,<br />&nbsp;&nbsp;&nbsp;&nbsp;reject_unknown_sender_domain,<br />&nbsp;&nbsp;&nbsp;&nbsp;reject_non_fqdn_sender,<br />&nbsp;&nbsp;&nbsp;&nbsp;reject_non_fqdn_recipient,<br />&nbsp;&nbsp;&nbsp;&nbsp;reject_unknown_recipient_domain,<br />&nbsp;&nbsp;&nbsp;&nbsp;reject_unauth_pipelining,<br />&nbsp;&nbsp;&nbsp;&nbsp;reject_unauth_destination,<br />&nbsp;&nbsp;&nbsp;&nbsp;permit</p> <p></p></td>
          </tr>
        </tbody>
      </table>
      <p>如果希望支持更多的虚拟域，可以在mydestination参数後面加上你所要支持的域即可。</p>
      <p>通过virtual和virtual.mysql为系统提供了邮箱本地查询表。</p>
      <p>在上面的配置文件里面使用了SASL来进行SMTP发信认证。</p>
      <p>&nbsp;</p>
      <p>通过smtpd_recipient_restrictions提供了基本的反垃圾邮件功能。首先允许本地网络（这里是本机）和通过SASL认证的用户可以使用本服务器发信；然後检查每个用户的全局邮件过滤功能是否打开，如果关闭则不进行後面的反垃圾邮件检查；其後是一些Postfix支持的基本反垃圾邮件功能。</p>
      <p>创建/etc/postfix/virtual.mysql，它提供了本地用户和邮件转发功能。FORWARD字段默认是指向用户的存储邮箱名的（Courier-IMAP所管理的邮箱名称），即进行本地投递；如果FORWARD字段是另外一个用户名或者邮件地址，则该邮件被转发到别的用户或其它邮件地址。</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail postfix]# <span class="type"><font color="#ff0000">vi virtual.mysql</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p><font color="#ff0000"></font>&nbsp;</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>#</p> <p># mysql config file for alias lookups on postfix</p> <p>#</p> <p>&nbsp;</p> <p># the user name and password to log into the mysql server</p> <p>hosts = localhost</p> <p>user = mail</p> <p>password = secret</p> <p>&nbsp;</p> <p># the database name on the servers</p> <p>dbname = mail</p> <p>&nbsp;</p> <p># the table name</p> <p>table = USER</p> <p>&nbsp;</p> <p>select_field = FORWARD</p> <p>where_field = USERNAME</p> <p>additional_conditions = and STATUS = 1 limit 1</p></td>
          </tr>
        </tbody>
      </table>
      <p>&nbsp;</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail postfix]# <span class="type"><font color="#ff0000">vi filter.virtual</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p><font color="#ff0000"></font>&nbsp;</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>#</p> <p># mysql config file for filter flag on postfix</p> <p>#</p> <p>&nbsp;</p> <p># the user name and password to log into the mysql server</p> <p>hosts = localhost</p> <p>user = mail</p> <p>password = secret</p> <p>&nbsp;</p> <p># the database name on the servers</p> <p>dbname = mail</p> <p>&nbsp;</p> <p># the table name</p> <p>table = USER</p> <p>&nbsp;</p> <p>select_field = FILTER</p> <p># OK : ignore filter</p> <p># DUNNO : filter </p> <p>where_field = MAIL </p> <p>additional_conditions = and STATUS = 1 limit 1</p></td>
          </tr>
        </tbody>
      </table>
      <h2><a name="a.7.4"></a>7.4.&nbsp; 运行</h2>
      <p>启动命令如下：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail postfix]# <span class="type"><font color="#ff0000">/usr/sbin/postfix start</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>可以使用文末所附脚本设置postfix在系统启动时候自动运行。</p>
      <h2><a name="a.7.5"></a>7.5.&nbsp; 测试Postfix</h2>
      <p>启动Postfix後，首先检查日志/var/log/messages有无错误信息，然後检查进程，应该有如下进程存在：检查端口及进程：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail postfix]#<font color="#ff0000"> <span class="type">pstree |grep master</span></font></p> <p><font color="#ff0000"></font>&nbsp;</p> <p>|-master-+-pickup</p> <p>&nbsp;</p></td>
          </tr>
        </tbody>
      </table>
      <p>接着检查端口，应该有如下端口打开：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail postfix]# <span class="type"><font color="#ff0000">netstat -an |grep LISTEN</font></span></p> <p><font color="#ff0000"></font>&nbsp;</p> <p>tcp00 0.0.0.0:250.0.0.0:*LISTEN</p> <p>&nbsp;</p></td>
          </tr>
        </tbody>
      </table>
      <p>再检测SMTP服务是否正常：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail postfix]# <span class="type"><font color="#ff0000">telnet localhost 25</font></span></p> <p>Trying 127.0.0.1...<br />Connected to localhost.<br />Escape character is '^]'.<br />220 mail.cngnu.org ESMTP Postfix<br /><font color="#ff0000"><span class="type">QUIT</span><br /></font>221 Bye<br />Connection closed by foreign host.</p></td>
          </tr>
        </tbody>
      </table>
      <p>使用如下命令测试postfix的SMTP的认证（这里仅测试了「virtualuser@cngnu.org」，「trueuser」请自行测试）：</p>
      <p>PLAIN认证方式：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail postfix]# <font color="#ff0000">perl -MMIME::Base64 -e \</font></p> <p><font color="#ff0000">&gt; 'print encode_base64(&quot;virtualuser\@cngnu.org\000virtualuser\@cngnu.org\000testpw&quot;);'</font><br />dmlydHVhbHVzZXJAY25nbnUub3JnAHZpcnR1YWx1c2VyQGNuZ251Lm9yZwB0ZXN0cHc=</p> <p>&nbsp;</p> <p>[root@mail postfix]# <span class="type"><font color="#ff0000">telnet localhost 25</font></span></p> <p>Trying 127.0.0.1...<br />Connected to localhost.<br />Escape character is '^]'.<br />220 mail.cngnu.org ESMTP Postfix</p> <p class="type">EHLO cngnu</p> <p>250-mail.cngnu.org</p> <p>250-PIPELINING</p> <p>250-SIZE 10240000</p> <p>250-VRFY</p> <p>250-ETRN</p> <p>250-AUTH LOGIN PLAIN</p> <p>250-AUTH=LOGIN PLAIN</p> <p></p> <p>250-XVERP</p> <p>250 8BITMIME</p> <p class="type">AUTH PLAIN dmlydHVhbHVzZXJAY25nbnUub3JnAHZpcnR1YWx1c2VyQGNuZ251Lm9yZwB0ZXN0cHc==</p> <p>235 Authentication successful</p> <p class="type">QUIT</p> <p>221 Bye</p> <p>Connection closed by foreign host.</p> <p>&nbsp;</p> <p>[root@mail postfix]# <font color="#ff0000">perl -MMIME::Base64 -e \</font></p> <p><font color="#ff0000">&gt; 'print encode_base64(&quot;trueuser\000trueuser\000testpw&quot;);'</font><br />dHJ1ZXVzZXIAdHJ1ZXVzZXIAdGVzdHB3</p> <p>&nbsp;</p></td>
          </tr>
        </tbody>
      </table>
      <p>LOGIN认证方式：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail postfix]# <font color="#ff0000">perl -MMIME::Base64 -e \</font></p> <p><font color="#ff0000">&gt; 'print encode_base64(&quot;virtualuser\@cngnu.org&quot;);'</font></p> <p>dmlydHVhbHVzZXJAY25nbnUub3Jn</p> <p>[root@mail postfix]# <font color="#ff0000">perl -MMIME::Base64 -e \</font></p> <p><font color="#ff0000">&gt; 'print encode_base64(&quot;testpw&quot;);'</font></p> <p>dGVzdHB3</p> <p>&nbsp;</p> <p>[root@mail postfix]# <span class="type"><font color="#ff0000">telnet localhost 25</font></span></p> <p>Trying 127.0.0.1...<br />Connected to localhost.<br />Escape character is '^]'.<br />220 mail.cngnu.org ESMTP Postfix</p> <p class="type">EHLO cngnu</p> <p>250-mail.cngnu.org</p> <p>250-PIPELINING</p> <p>250-SIZE 10240000</p> <p>250-VRFY</p> <p>250-ETRN</p> <p>250-AUTH LOGIN PLAIN</p> <p>250-AUTH=LOGIN PLAIN</p> <p></p> <p>250-XVERP</p> <p>250 8BITMIME</p> <p class="type">AUTH LOGIN</p> <p><i>3</i>34 VXNlcm5hbWU6</p> <p class="type">dmlydHVhbHVzZXJAY25nbnUub3Jn</p> <p>334 UGFzc3dvcmQ6</p> <p class="type">dGVzdHB3</p> <p>235 Authentication successful</p> <p class="type">QUIT</p> <p>221 Bye</p> <p>Connection closed by foreign host.</p> <p>&nbsp;</p> <p>[root@mail postfix]# <font color="#ff0000">perl -MMIME::Base64 -e \</font></p> <p><font color="#ff0000">&gt; 'print encode_base64(&quot;trueuser&quot;);'</font></p> <p>dHJ1ZXVzZXI=</p> <p>[root@mail postfix]# <font color="#ff0000">perl -MMIME::Base64 -e \</font></p> <p><font color="#ff0000">&gt; 'print encode_base64(&quot;testpw&quot;);'</font></p> <p>dGVzdHB3</p> <p>&nbsp;</p></td>
          </tr>
        </tbody>
      </table>
      <p>此时，由於还没有安装Courier-IMAP以及创建邮箱，所以还不能提交邮件，请继续下一步。</p>
      <p>这里使用Perl里面的MIME::Base64模块（如果需要安装：perl -MCPAN -e 'install MIME::Base64;'）来取得这个验证串：perl -MMIME::Base64 -e 'print base64_encode(&quot;用户名\000用户名\000密码&quot;);'来得到MIME-Base64编码的验证串（「\000」是八进制的ASCII(0)字符）。此外，你也可以使用mmencode来生成，mmencode可以在metamail这个包里面找到。</p>
      <p>&nbsp;</p>
      <h1><a name="a.8"></a>8.&nbsp; 安装Courier-IMAP</h1>
      <h2><a name="a.8.1"></a>8.1.&nbsp; 下载</h2>
      <p><a href="http://sourceforge.net/projects/courier/"><font color="#0000ff">http://sourceforge.net/projects/courier/</font></a></p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail postfix]# <span class="type"><font color="#ff0000">cd /usr/src</font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">wget </font><a href="http://umn.dl.sourceforge.net/sourceforge/courier/courier-imap-2.2.1.tar.bz2"><font color="#0000ff">http://umn.dl.sourceforge.net/sourceforge/courier/courier-imap-2.2.1.tar.bz2 </font></a><br /></span></p></td>
          </tr>
        </tbody>
      </table>
      <h2><a name="a.8.2"></a>8.2.&nbsp; 编译与安装</h2>
      <p>编译Cyrus-IMAP，并取消kerberos支持（在Redhat中，kerberos库有问题，很难编译通过，Mandrake则可以通过；此外，我们也不需要kerberos的支持）和snmp的支持：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail src]# <span class="type"><font color="#ff0000">tar -jxf courier-imapd-2.2.1.tar.ba2</font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">cd courier-imapd-2.2.1</font></span></p> <p><font color="#ff0000"></font>&nbsp;</p> <p>[root@mail courier-imapd-2.2.1]# <span class="type"><font color="#ff0000">./configure --with-redhat \</font></span></p> <p>&gt; <span class="type"><font color="#ff0000">--disable-root-check --enable-unicode=utf-8,iso-8859-1,gb2312 \ </font></span></p> <p>&gt; <font color="#ff0000">--with-trashquota </font><font color="#ff0000">--with-dirsync</font></p> <p>&nbsp;</p> <p>[root@mail courier-imapd-2.2.1]# <span class="type"><font color="#ff0000">make </font></span></p> <p>[root@mail courier-imapd-2.2.1]# <span class="type"><font color="#ff0000">make install-strip</font></span></p> <p>[root@mail courier-imapd-2.2.1]# <span class="type"><font color="#ff0000">make install-configure</font></span></p> <p>[root@mail courier-imapd-2.2.1]# <span class="type"><font color="#ff0000">cp courier-imap.sysvinit /etc/rc.d/init.d/courier-imap</font></span></p> <p>[root@mail courier-imapd-2.2.1]#<span class="type"><font color="#ff0000"> chmod 755 /etc/rc.d/init.d/courier-imap</font></span></p> <p>[root@mail courier-imapd-2.2.1]#<span class="type"><font color="#ff0000"> chkconfig --level 0123456 courier-imap</font></span><span class="type"><font color="#ff0000"> on<br /></font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p><font color="#ff0000"></font>&nbsp;</p>
      <h2><a name="a.8.3"></a>8.3.&nbsp; 配置</h2>
      <p>修改Courier-IMAP的认证配置文件/usr/lib/courier-imap/etc/authdaemonrc：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail courier-imapd-2.2.1]# <span class="type"><font color="#ff0000">cd /usr/lib/courier-imap/etc</font></span></p> <p>[root@mail etc]# <span class="type"><font color="#ff0000">vi authdaemonrc </font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>内容如下，确保只使用mysql认证模块：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>authmodulelist=&quot;authmysql&quot;<br />authmodulelistorig=&quot;authmysql&quot;<br />version=&quot;authdaemond.mysql&quot; </p></td>
          </tr>
        </tbody>
      </table>
      <p>然後修改mysql认证模块的配置文件：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail etc]# <span class="type"><font color="#ff0000">vi authmysqlrc </font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>内容如下：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>MYSQL_SERVER localhost<br />MYSQL_USERNAME mail<br />MYSQL_PASSWORD secret<br />MYSQL_SOCKET /var/lib/mysql/mysql.sock<br />MYSQL_PORT 3306<br />MYSQL_DATABASE mail<br />MYSQL_USER_TABLE USER<br />MYSQL_CRYPT_PWFIELD PASSWORD<br />MYSQL_CLEAR_PWFIELD CLEAR_PASSWORD<br />MYSQL_UID_FIELD UID<br />MYSQL_GID_FIELD GID<br />MYSQL_LOGIN_FIELD USERNAME<br />MYSQL_HOME_FIELD HOMEDIR<br />MYSQL_NAME_FIELD USERNAME<br />MYSQL_MAILDIR_FIELD MAILDIR<br />MYSQL_QUOTA_FIELD QUOTA<br />MYSQL_WHERE_CLAUSE STATUS=1<br /></p></td>
          </tr>
        </tbody>
      </table>
      <p>编辑IMAP的配置文件imapd，使其自动启动：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail etc]# <span class="type"><font color="#ff0000">vi imapd </font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>修改其最後一行为YES：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>IMAPDSTART=YES</p></td>
          </tr>
        </tbody>
      </table>
      <p>编辑POP3的配置文件pop3d，使其自动启动：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail etc]# <span class="type"><font color="#ff0000">vi pop3d </font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>修改其最後一行为YES：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>POP3DSTART=YES</p></td>
          </tr>
        </tbody>
      </table>
      <h2><a name="a.8.4"></a>8.4.&nbsp; 运行</h2>
      <p>启动Courier-IMAP，启动命令如下：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail etc]# <span class="type"><font color="#ff0000">/etc/rc.d/init.d/courier-imap start </font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>Courier-IMAP的认证进程会自动运行。</p>
      <h2><a id="a.8.5" name="a.8.5"></a>8.5.&nbsp; 测试Courier-IMAP</h2>
      <p>启动Courier-IMAP後，首先检查日志/var/log/messages和/var/log/imapd.log有无错误信息，然後检查进程，应该有如下进程存在：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail etc]# <span class="type"><font color="#ff0000">pstree |grep authdaemond</font></span></p> <p><font color="#ff0000"></font>&nbsp;</p> <p>|-authdaemond.mys---5*[authdaemond.mys]</p> <p>[root@mail etc]# <span class="type"><font color="#ff0000">pstree |grep courier </font></span></p> <p><font color="#ff0000"></font>&nbsp;</p> <p>|-2*[courierlogger]</p> <p>|-2*[couriertcpd]</p></td>
          </tr>
        </tbody>
      </table>
      <p>接着检查端口，应该有如下端口打开：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail etc]# <span class="type"><font color="#ff0000">netstat -an |grep LISTEN</font></span></p> <p><font color="#ff0000"></font>&nbsp;</p> <p>tcp00 0.0.0.0:1100.0.0.0:*LISTEN</p> <p>tcp00 0.0.0.0:1430.0.0.0:*LISTEN</p></td>
          </tr>
        </tbody>
      </table>
      <p>&nbsp;</p>
      <p>现在创建邮箱。</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail etc]# <span class="type"><font color="#ff0000">mkdir /data</font></span></p> <p>[root@mail etc]# <span class="type"><font color="#ff0000">chown maildrop:maildrop /data</font></span></p> <p>[root@mail etc]# <span class="type"><font color="#ff0000">su -s/bin/bash maildrop </font></span></p> <p>bash-2.05b$ <span class="type"><font color="#ff0000">cd /data</font></span></p> <p>bash-2.05b$ <span class="type"></span><span class="type"><font color="#ff0000">mkdir trueuser</font></span></p> <p>bash-2.05b$ <span class="type"><font color="#ff0000">/usr/local/bin/maildirmake trueuser/Maildir</font></span></p> <p>bash-2.05b$ <span class="type"></span><span class="type"><font color="#ff0000">mkdir -p cngnu.org/virtualuser</font></span></p> <p>bash-2.05b$ <span class="type"><font color="#ff0000">/usr/local/bin/maildirmake cngnu.org/virtualuser/Maildir</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>再检测POP3和IMAP服务：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail etc]# <span class="type"><font color="#ff0000">telnet localhost 110</font></span></p> <p>+OK Hello there </p> <p class="type">USER virtualuser@cngnu.org </p> <p>+OK Password required. </p> <p class="type">PASS testpw</p> <p>+OK Logged in. </p> <p class="type">QUIT</p> <p>+OK bye-bye </p></td>
          </tr>
        </tbody>
      </table>
      <h1><a id="a.9" name="a.9"></a>9.&nbsp; 安装IMP</h1>
      <h2><a id="a.9.1" name="a.9.1"></a>9.1.&nbsp; 下载</h2>
      <p>http://www.horde.org/horde/</p>
      <p>http://www.horde.org/imp/3.2.2/</p>
      <p>http://www.horde.org/turba/</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail etc]# <span class="type"><font color="#ff0000">cd /usr/src</font></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">wget </font><a href="ftp://ftp.horde.org/pub/horde/horde-2.2.4.tar.gz"><font color="#0000ff">ftp://ftp.horde.org/pub/horde/horde-2.2.4.tar.gz</font></a></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">wget </font><a href="ftp://ftp.horde.org/pub/pear/pear-1.1.tar.gz"><font color="#0000ff">ftp://ftp.horde.org/pub/pear/pear-1.1.tar.gz</font></a></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">wget </font><a href="ftp://ftp.horde.org/pub/imp/imp-3.2.2.tar.gz"><font color="#0000ff">ftp://ftp.horde.org/pub/imp/imp-3.2.2.tar.gz</font></a></span></p> <p>[root@mail src]# <span class="type"><font color="#ff0000">wget </font><a href="ftp://ftp.horde.org/pub/turba/turba-1.2.1.tar.gz"><font color="#0000ff">ftp://ftp.horde.org/pub/turba/turba-1.2.1.tar.gz</font></a></span></p></td>
          </tr>
        </tbody>
      </table>
      <p><font color="#0000ff"></font>&nbsp;</p>
      <h2><a id="a.9.2" name="a.9.2"></a>9.2.&nbsp; 配置Apache与PHP</h2>
      <p>IMP对PHP的环境要求较高。所以通常需要升级PHP包，并安装由Horde定制後的PEAR包。</p>
      <p>修改/etc/php.ini，将register_globals功能打开。</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>register_globals = On</p></td>
          </tr>
        </tbody>
      </table>
      <p>安装PEAR包，在AS3中，它位於/usr/share/pear下：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail src]# <font color="#ff0000"><span class="type">tar zxf /usr/src/pear-1.1.tar.gz</span><span class="type"></span></font></p> <p>[root@mail lib]# <span class="type"><font color="#ff0000">cd /usr/share</font></span></p> <p>[root@mail lib]# <span class="type"><font color="#ff0000">/bin/cp -Rf /usr/src/pear/* pear</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>最後重新启动Apache：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail lib]# <span class="type"><font color="#ff0000">chkconfig --level 0123456 httpd on </font></span></p> <p>[root@mail lib]# <span class="type"><font color="#ff0000">/etc/rc.d/init.d/httpd restart</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <h2><a id="a.9.3" name="a.9.3"></a>9.3.&nbsp; 配置Horde</h2>
      <p>安装Horde：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail lib]# <font color="#ff0000">cd /var/www/html</font></p> <p>[root@mail html]# <span class="type"><font color="#ff0000">tar zxf /usr/src/horde-2.2.4.tar.gz</font></span></p> <p>[root@mail html]# <span class="type"><font color="#ff0000">mv horde-2.2.4 horde</font></span></p> <p>[root@mail html]# <span class="type"><font color="#ff0000">cd horde/scripts/db</font></span></p> <p><font color="#ff0000"></font>&nbsp;</p> <p>[root@mail db]# <span class="type"><font color="#ff0000">mysql &lt; mysql_create.sql</font></span></p> <p><font color="#ff0000"></font>&nbsp;</p> <p>[root@mail db]# <span class="type"><font color="#ff0000">cd ../../config</font></span></p> <p>[root@mail config]# <span class="type"><font color="#ff0000">for foo in *.dist; do cp $foo `basename $foo .dist`;done</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>然後修改config目录下面的horde.php。</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail config]# <span class="type"><font color="#ff0000">vi horde.php</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>修改162行：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>$conf['prefs']['driver'] = 'none';</p></td>
          </tr>
        </tbody>
      </table>
      <p>为：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>$conf['prefs']['driver'] = 'sql';</p></td>
          </tr>
        </tbody>
      </table>
      <p>修改171行至176行，将其注释去掉并写入horde数据库的口令：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>// $conf['prefs']['params']['phptype'] = 'mysql';<br />// $conf['prefs']['params']['hostspec'] = 'localhost';<br />// $conf['prefs']['params']['username'] = 'horde';<br />// $conf['prefs']['params']['password'] = '*****';<br />// $conf['prefs']['params']['database'] = 'horde';<br />// $conf['prefs']['params']['table'] = 'horde_prefs';<br /></p></td>
          </tr>
        </tbody>
      </table>
      <p>为：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>$conf['prefs']['params']['phptype'] = 'mysql';<br />$conf['prefs']['params']['hostspec'] = 'localhost';<br />$conf['prefs']['params']['username'] = 'horde';<br />$conf['prefs']['params']['password'] = 'horde';<br />$conf['prefs']['params']['database'] = 'horde';<br />$conf['prefs']['params']['table'] = 'horde_prefs';<br /></p></td>
          </tr>
        </tbody>
      </table>
      <p>这里我们没有修改horde数据库的默认的数据库设置，如果在实际使用中，至少应该取一个比较复杂的密码。</p>
      <p>&nbsp;</p>
      <p>再来修改config目录下面的registry.php。</p> , ,
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail config]# <span class="type"><font color="#ff0000">vi registry.php</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>修改23行至24行，将其注释去掉：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>// $this-&gt;registry['auth']['login'] = 'imp';<br />// $this-&gt;registry['auth']['logout'] = 'imp';<br /></p></td>
          </tr>
        </tbody>
      </table>
      <p>为：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>$this-&gt;registry['auth']['login'] = 'imp';<br />$this-&gt;registry['auth']['logout'] = 'imp';<br /></p></td>
          </tr>
        </tbody>
      </table>
      <p>然後修改119丶138行激活IMP和Turba：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>'status' =&gt; 'inactive'<br /></p></td>
          </tr>
        </tbody>
      </table>
      <p>为：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>'status' =&gt; 'active'<br /></p></td>
          </tr>
        </tbody>
      </table>
      <p>最後在浏览器中访问如下URL测试Horde需要的环境是否满足：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>http://你的邮件服务器的IP/horde/test.php</p></td>
          </tr>
        </tbody>
      </table>
      <p>如果发现有红色的提示，可能需要修改你的PHP的安装和配置（参见上一节），然後再重新测试。</p>
      <h2><a id="a.9.4" name="a.9.4"></a>9.4.&nbsp; 配置IMP</h2>
      <p>安装IMP：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail config]# <span class="type"><font color="#ff0000">cd ..</font></span></p> <p>[root@mail horde]# <span class="type"><font color="#ff0000">tar zxf /usr/src/imp-3.2.2.tar.gz</font></span></p> <p>[root@mail horde]# <span class="type"><font color="#ff0000">mv imp-3.2.2 imp</font></span></p> <p>[root@mail horde]# <span class="type"><font color="#ff0000">cd imp/config</font></span></p> <p>[root@mail config]# <span class="type"><font color="#ff0000">for foo in *.dist; do cp $foo `basename $foo .dist`;done</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>然後修改config目录里面的conf.php：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail config]# <span class="type"><font color="#ff0000">vi conf.php</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>修改37行：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>$conf['menu']['apps'] = array();</p></td>
          </tr>
        </tbody>
      </table>
      <p>为：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>$conf['menu']['apps'] = array('turba');</p></td>
          </tr>
        </tbody>
      </table>
      <p>修改57行：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>$conf['user']['allow_resume_all'] = false;</p></td>
          </tr>
        </tbody>
      </table>
      <p>为：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>$conf['user']['allow_resume_all'] = true;</p></td>
          </tr>
        </tbody>
      </table>
      <p>修改63行：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>$conf['user']['allow_resume_all_in_drafts'] = false;</p></td>
          </tr>
        </tbody>
      </table>
      <p>为：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>$conf['user']['allow_resume_all_in_drafts'] = true;</p></td>
          </tr>
        </tbody>
      </table>
      <p>&nbsp;</p>
      <p>然後修改prefs.php：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail config]# <span class="type"><font color="#ff0000">vi prefs.php</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>将自动维护功能关闭，修改426丶427行：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>'value' =&gt; 1,<br />'locked' =&gt; false,<br /></p></td>
          </tr>
        </tbody>
      </table>
      <p>为：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>'value' =&gt; 0,<br />'locked' =&gt; true,<br /></p></td>
          </tr>
        </tbody>
      </table>
      <p>再注释773行：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>'value' =&gt; '',</p></td>
          </tr>
        </tbody>
      </table>
      <p>为：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>//'value' =&gt; '',</p></td>
          </tr>
        </tbody>
      </table>
      <p>取消注释774行：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>// 'value' =&gt; 'localsql',</p></td>
          </tr>
        </tbody>
      </table>
      <p>为：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>'value' =&gt; 'localsql',</p></td>
          </tr>
        </tbody>
      </table>
      <p>&nbsp;</p>
      <p>最後修改servers.php：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail config]# <span class="type"><font color="#ff0000">vi servers.php</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>注释除「cyrus」服务器外的所有服务器配置，然後修改「cyrus」服务器的配置为：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>$servers['cyrus'] = array(<br />'name' =&gt; 'IMAP Server',<br />'server' =&gt; 'localhost',<br />'protocol' =&gt; 'imap/notls',<br />'port' =&gt; 143,<br />'folders' =&gt; 'mail/',<br />'namespace' =&gt; '',<br />'maildomain' =&gt; 'cngnu.org',<br />'smtphost' =&gt; 'mail.cngnu.org',<br />'realm' =&gt; 'cngnu.org',<br />'preferred' =&gt; ''<br />);<br /></p></td>
          </tr>
        </tbody>
      </table>
      <p>&nbsp;</p>
      <h2><a id="a.9.5" name="a.9.5"></a>9.5.&nbsp; 配置Turba</h2>
      <p>安装Turba：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail config]# <span class="type"><font color="#ff0000">cd ../..</font></span></p> <p>[root@mail horde]# <span class="type"><font color="#ff0000">tar zxf /usr/src/turba-1.2.1.tar.gz</font></span></p> <p>[root@mail horde]# <span class="type"><font color="#ff0000">mv turba-1.2.1 turba</font></span></p> <p>[root@mail horde]# <span class="type"><font color="#ff0000">cd turba/config</font></span></p> <p>[root@mail config]# <span class="type"><font color="#ff0000">for foo in *.dist; do cp $foo `basename $foo .dist`;done</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>然後修改config目录里面的conf.php：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail config]# <span class="type"><font color="#ff0000">vi conf.php</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>修改32行：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>$conf['menu']['apps'] = array();</p></td>
          </tr>
        </tbody>
      </table>
      <p>为：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>$conf['menu']['apps'] = array('imp');</p></td>
          </tr>
        </tbody>
      </table>
      <p>然後修改config目录里面的sources.php：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail config]# <span class="type"><font color="#ff0000">vi sources.php</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <p>修改146行：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>'password' =&gt; '*****';</p></td>
          </tr>
        </tbody>
      </table>
      <p>为：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>'password' =&gt; 'horde';</p></td>
          </tr>
        </tbody>
      </table>
      <p>最後，添加turba数据库表：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail config]# <font color="#ff0000">cd ../scripts/drivers</font></p> <p>[root@mail config]# <font color="#ff0000">mysql horde &lt;turba.sql</font></p></td>
          </tr>
        </tbody>
      </table>
      <p>&nbsp;</p>
      <h2><a id="a.9.6" name="a.9.6"></a>9.6.&nbsp; 测试IMP</h2>
      <p>最後在浏览器中访问如下URL：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>http://你的邮件服务器的IP/horde/</p></td>
          </tr>
        </tbody>
      </table>
      <p>输入用户名virtualuser@cngnu.org和密码testpw登录（或trueuser）。</p>
      <h1><a id="a.10" name="a.10"></a>10.&nbsp; 其他</h1>
      <h2><a id="a.10.1" name="a.10.1"></a>10.1.&nbsp; 启动脚本</h2>
      <p>Courier-IMAP已经有了启动脚本，只需要为Postfix编写一个启动脚本postfix即可：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
                 <td bgcolor="#ffffcc"><pre>#!/bin/bash
              #
              # mailsys This shell script takes care of starting and stopping Postfix 
              # author : xingyu.wang &lt;wxy@cngnu.org&gt; 2004/1/28
              #
              # chkconfig: 2345 80 30
              # description: Postfix is a Mail Transport Agent, which is the program
              # that moves mail from one machine to another.
              #
              # processname: mailsys
              # pidfile: /var/run/postfix.pid
              # Source function library.
              . /etc/rc.d/init.d/functions
              # Source networking configuration.
              . /etc/sysconfig/network
              # Check that networking is up.
              [ ${NETWORKING} = &quot;no&quot; ] &amp;&amp; exit 0
              [ -f /usr/sbin/postfix ] || exit 0
              RETVAL=0
              prog=&quot;Postfix&quot;
              start() {
                  # Start daemons.
                  echo -n $&quot;Starting $prog: &quot;
                  /usr/sbin/postfix start &gt; /dev/null 2&gt;&amp;1 &amp;
                  RETVAL=$?
                  if [ $RETVAL -eq 0 ]; then
                      touch /var/lock/subsys/postfix
                      success $&quot;$prog start&quot; 
                  else
                      failure $&quot;$prog start failure&quot;
                  fi
                  echo
                  return $RETVAL
              }
              stop() {
                  # Stop daemons.
                  echo -n $&quot;Shutting down $prog: &quot;
                  /usr/sbin/postfix stop &gt; /dev/null 2&gt;&amp;1 &amp; 
                  RETVAL=$?
                  if [ $RETVAL -eq 0 ]; then
                      rm -f /var/lock/subsys/postfix
                      success $&quot;$prog stop&quot;
                  else
                      failure $&quot;$prog stop failure&quot;
                  fi
                  echo
                  return $RETVAL
              }
              # See how we were called.
              case &quot;$1&quot; in
                  start)
                      start
                  ;;
                  stop)
                      stop
                  ;;
                  restart|reload)
                      stop
                      start
                      RETVAL=$?
                  ;;
                  *)
                      echo $&quot;Usage: $0 {start|stop|restart}&quot;
                      exit 1
              esac
              exit $RETVAL
            </pre></td>
          </tr>
        </tbody>
      </table>
      <p>&nbsp;</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail root]# <span class="type"><font color="#ff0000">chmod 755 /etc/rc.d/init.d/postfix</font></span></p> <p>[root@mail root]# <span class="type"><font color="#ff0000">chkconfig --level 0123456 postfix on </font></span></p> <p>[root@mail root]# <span class="type"><font color="#ff0000">chkconfig --level 0123456 sendmail off</font></span></p></td>
          </tr>
        </tbody>
      </table>
      <h2><a id="a.10.2" name="a.10.2"></a>10.2.&nbsp; 整体测试</h2>
      <p>创建邮箱後，测试发信功能：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail root]# <span class="type"><font color="#ff0000">mail trueuser </font></span></p> <p>Subject: <span class="type"><font color="#ff0000">test by me</font></span></p> <p class="type">this is a test.</p> <p class="type">.</p> <p>CC:</p> <p>[root@mail root]# <span class="type"><font color="#ff0000">mailq</font></span></p> <p>Mail queue is empty</p> <p>[root@mail root]# <span class="type"><font color="#ff0000">tail /var/log/maillog</font></span></p> <p><font color="#ff0000"></font>&nbsp;</p></td>
          </tr>
        </tbody>
      </table>
      <p>使用mailq来查看邮件队列是否有错误，并查看/var/log/maillog是否有错误信息。如果一切正常，说明信件已经发送到trueuser了。</p>
      <p>测试收信，先测试POP3：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td> <p>[root@mail root]# <span class="type"><font color="#ff0000">telnet localhost 110</font></span></p> <p>+OK hello there </p> <p class="type">USER trueuser </p> <p>+OK Password required. </p> <p class="type">PASS testpw</p> <p>+OK Logged in. </p> <p class="type">LIST</p> <p>1 400</p> <p class="type">TOP 1 10</p> <p>Return-Path: &lt;root@cngnu.org&gt;<br />Delivered-To: &lt;trueuser@cngnu.org&gt;<br />Received: by mail.cngnu.org (Postfix, from userid 0)<br />id 6A7C4CCCF; Mon, 26 Jan 2004 21:27:23 +0800 (CST)<br />To: trueuser@cngnu.org<br />Subject: test by me<br />Message-Id: &lt;20040126212723.6A7C4CCCF@mail.cngnu.org&gt;<br />Date: Mon, 26 Jan 2004 21:27:23 +0800 (CST)<br />From: root@cngnu.org (root)</p> <p>this is a test.</p> <p>.</p> <p class="type">QUIT</p> <p>+OK</p></td>
          </tr>
        </tbody>
      </table>
      <p>&nbsp;</p>
      <p>最後测试IMP，在浏览器中访问如下URL：</p>
      <table width="100%" bgcolor="#ccffcc" border="0">
        <tbody>
          <tr>
            <td bgcolor="#ffffcc"> <p>http://你的IMP服务器的IP/horde/</p></td>
          </tr>
        </tbody>
      </table>
      <p>输入用户名trueuser和密码testpw登录。</p>
      <p>&nbsp;</p>
      <p>你也可以使用任何其它的邮件客户端程序来测试，如kmail丶Outlook Express等等。</p>
    </body>
  </html>